package org.example.service;

import org.example.entity.User;
import org.example.common.result.PageResult;

import java.util.List;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 根据手机号查询用户（已废弃，建议使用 getByPhoneAndUserType）
     * @param phone 手机号
     * @return 用户信息
     */
    User getByPhone(String phone);
    
    /**
     * 根据手机号和用户类型查询用户（推荐使用）
     * @param phone 手机号
     * @param userType 用户类型（平台端/企业端/用户端），如果为null则返回第一个匹配的用户
     * @return 用户信息
     */
    User getByPhoneAndUserType(String phone, String userType);
    
    /**
     * 根据ID查询用户
     * @param id 用户ID
     * @return 用户信息
     */
    User getById(Long id);
    
    // ========== 平台端用户管理方法 ==========
    
    /**
     * 分页查询平台用户列表
     */
    PageResult<User> getPlatformUserList(Integer page, Integer size, String username, String phone);
    
    /**
     * 根据ID查询平台用户详情
     */
    User getPlatformUserById(Long userId);
    
    /**
     * 创建平台管理员账号
     */
    User createPlatformUser(User user);
    
    /**
     * 更新平台用户信息
     */
    User updatePlatformUser(User user);
    
    /**
     * 删除平台用户
     */
    void deletePlatformUser(Long userId);
    
    /**
     * 为平台用户分配角色
     */
    void assignPlatformRoles(Long userId, List<Long> roleIds);
    
    /**
     * 更新平台用户状态
     */
    void updatePlatformUserStatus(Long userId, Integer status);
    
    /**
     * 重置平台用户密码
     */
    void resetPlatformUserPassword(Long userId);

    /**
     * 换绑平台用户手机号
     */
    void changePlatformUserPhone(Long userId, String oldPhone, String oldCode, String newPhone, String newCode);

    /**
     * 验证用户是否有权限访问指定租户
     * @param userId 用户ID
     * @param companyId 租户ID
     * @return 是否有权限
     */
    boolean hasAccessToCompany(Long userId, Long companyId);
    
    /**
     * 统计指定角色下的用户数量（企业端）
     * @param roleId 角色ID
     * @param companyId 企业ID
     * @return 用户数量
     */
    int countUsersByRoleId(Long roleId, Long companyId);
}
